package com.class05.method_more._04recursion;

/**
 * @author 尚硅谷-宋红康
 * @create 16:57
 */
public class RecursionTest {

    public static void main(String[] args) {
        int n = 3;
        RecursionTest recursionTest = new RecursionTest();
        int sum = recursionTest.getSum2(n);
        System.out.println(sum);
        System.out.println(recursionTest.getMulti(n));


    }

    //    举例1：计算1-100内自然数的总和
    public int getSum(int num) {
        int sum = 0;
        for (int i = 1; i <= num; i++) {
            sum += i;  // sum = sum + i;
        }
        return sum;
    }

    public int getSum2(int num) {
        if (num == 1) {//出口
            return 1;
        }
//        规律
        return num + getSum2(num - 1);
    }

    //    计算2：计算n的阶乘
    public int getMulti(int num) {
        if (num == 1) {//出口
            return 1;
        }
//        规律
        return num * getMulti(num - 1);
    }

    //    举例3：快排
//    举例4：汉诺塔游戏
//    举例5：斐波拉契数列
//    1 1 2  3  5  8  13  21  34  55  89  144  233  377
//    f(n) = f(n-1) + f(n-2)
    public int getFibonacci(int n) {
        if (n == 1 || n == 2) { //出口
            return 1;
        }
        return getFibonacci(n - 1) + getFibonacci(n - 2);
    }


}
